package com.smalluz.ad.modules.common.config;

import java.util.Date;
import java.util.concurrent.locks.Lock;

import com.smalluz.ad.modules.ks.result.KsAccessTokenResult;
import com.smalluz.ad.modules.oe.result.AccessTokenResult;

public interface ConfigStorage {
    /**
     * @return
     * @description 获取token
     */
    String getAccessToken();

    /**
     * 
     * @description 获取刷新token
     * @return
     */
    String getRefreshAccessToken();
    
    /**
     * 
     * @description 强制过期token
     */
    void expireAccessToken();
    
    /**
     * @return
     * @description 判断token是否有效
     */
    boolean isAccessTokenValid();

    /**
     * 
     * @description 判断刷新token是否有效
     * @return
     */
    boolean isRefreshAccessTokenValid();

    /**
     * 
     * @description 更新token
     * @param accessToken
     */
    void updateAccessToken(AccessTokenResult accessToken);
    
    /**
     * 
     * @description 更新token
     * @param accessToken
     */
    void updateAccessKsToken(KsAccessTokenResult accessToken);

    /**
     * 
     * @description 更新token
     * @param accessToken
     * @param expiresInSeconds
     */
    void updateAccessToken(String accessToken,String refreshAccessToken, Date LastOperationTime, int expiresInSeconds,int refreshExpiresTime);

    /**
     * @return
     * @description 锁
     */
    Lock getAccessTokenLock();

    /**
     * Gets app id.
     *
     * @return the app id
     */
    String getAppId();

    /**
     * Gets secret.
     *
     * @return the secret
     */
    String getSecret();

    String getAuthCode();

    /**
     * 
     * @description 设置授权编号
     * @param authCode
     */
    void setAuthCode(String authCode);

    String getGrantType();

    /**
     * 
     * @description 获取平台编码
     * @return
     */
    String getPlatformCode();

    /**
     * 
     * @description 设置平台编码
     * @param platformCode
     */
    void setPlatformCode(String platformCode);

    /**
     * 获取账户
     * @return
     */
    String getAccountNumber();

    /**
     * 设置账户
     * @param accountNumber
     */
    void setAccountNumber(String accountNumber);
}
